ultimo([X],1,X).
ultimo([_|Cola],K,Salida):-longitud(Cola,Sal),T is K-1,Sal>=T,ultimo(Cola,T,Salida).
longitud([],0).
longitud([_|Resto],Sal):-longitud(Resto,Sal1),Sal is Sal1+1.
quita_final([X],[],X).
quita_final([Y|Resto],[Y|Lista],X):-quita_final(Resto,Lista,X).
pon_al_final(X,[],[X]).
pon_al_final(X,[Y|Resto1],[Y|Resto2]):-pon_al_final(X,Resto1,Resto2).
ultimo2([X],1,[X]).
ultimo2([_|Cola],K,Salida):-longitud(Cola,Sal),T is K-1,Sal>=T,ultimo2(Cola,T,Salida).
n_esimo([X|_],1,X).
n_esimo([_|Resto],N,Salida):-T is N-1,n_esimo(Resto,T,Salida).
n_esimo2([X|_],1,[X]).
n_esimo2([_|Resto],N,Salida):-T is N-1,n_esimo2(Resto,T,Salida).
compactar([],[]).
compactar([X,X|Lista1],[[X|Lista2]|Salida]):-compactar([X|Lista1],[Lista2|Salida]).
compactar([X|Lista1],[[X]|Lista2]):-compactar(Lista1,Lista2).
compacta_cod([],[]).
compacta_cod([X],[[1,X]]).
compacta_cod([X,X|Lista1],[[M,X]|Lista2]):-compacta_cod([X|Lista1],[[N,X]|Lista2]),M is N+1.
compacta_cod([X,Y|Lista1],[[1,X]|Lista2]):-X\=Y,compacta_cod([Y|Lista1],Lista2).
compacta_cod2([],[]).
compacta_cod2([X,X|Lista1],[[M,X]|Lista2]):-compacta_cod2([X|Lista1],[[N,X]|Lista2]),M is N+1.
compacta_cod2([X|Lista1],[[1,X]|Lista2]):-compacta_cod2(Lista1,Lista2).
split(Lista,0,[],Lista).
split([X|Lista],N,[X|Lista1],Lista2):-K is N-1,split(Lista,K,Lista1,Lista2).
n_e(Lista,0,Lista).
n_e([_|Lista],N,Lista_Sal):-T is N-1,n_e(Lista,T,Lista_Sal).
encadena([],L,L).
encadena([X|L1],L2,[X|L3]):-encadena(L1,L2,L3).